package com.woniuxy.util;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.jwt.JWT;

public class JwtUtil {
    public final static String JWT_KEY = "woniuxy";
    public final static String JWT_ISSUER = "woniuxyzs";
    public final static int JWT_EXPIRE_MILLISECOND = 1000 * 30;//方便测试，20秒
    public final static int JWT_EXPIRE_MILLISECOND_REFRESH = 1000 * 60;//方便测试，20秒

    public static String create(String eid, String ename) {
        return JWT.create()
                .setKey(JWT_KEY.getBytes())//密钥
                .setIssuer(JWT_ISSUER)// jwt签发者
                .setIssuedAt(DateTime.now()) //签发时间
                .setNotBefore(DateTime.now()) //不可用时间点界限，在这个时间点之前，jwt不可用
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND, JWT_EXPIRE_MILLISECOND))// jwt的过期时间
                .setPayload("eid", eid)     //设置JWT载荷信息
                .setPayload("ename", ename)  //设置JWT载荷信息
                .sign();
    }
    public static String createRefresh(String eid, String ename) {
        return JWT.create()
                .setKey(JWT_KEY.getBytes())//密钥
                .setIssuer(JWT_ISSUER)// jwt签发者
                .setIssuedAt(DateTime.now()) //签发时间
                .setNotBefore(DateTime.now()) //不可用时间点界限，在这个时间点之前，jwt不可用
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND, JWT_EXPIRE_MILLISECOND_REFRESH))// jwt的过期时间
                .setPayload("eid", eid)     //设置JWT载荷信息
                .setPayload("ename", ename)  //设置JWT载荷信息
                .sign();
    }

    public static String getEid(String token) {
        return JWT.of(token).getPayload("eid").toString();
    }

    public static String getEname(String token) {
        return JWT.of(token).getPayload("ename").toString();
    }

    public static boolean validate(String token) {
        try {
            return JWT.of(token).setKey(JWT_KEY.getBytes()).verify();
        } catch (Exception e) {
            return false;
        }
    }

    //validate(0) ture 没有过期  ！validate(0)
    //isExpire ture 过期
    public static boolean isExpire(String token) {
        try {
            return !JWT.of(token).setKey(JWT_KEY.getBytes()).validate(0);
        } catch (Exception e) {
            return true;
        }
    }

}
